package com.wave.wavesystem.ai.advisor.factory;

import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.rag.generation.augmentation.ContextualQueryAugmenter;
import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.filter.Filter;
import org.springframework.ai.vectorstore.filter.FilterExpressionBuilder;

/**
 * 自定义的 rag 查询条件 工厂
 */
public class PostDocumentRetrieverAdvisorFactory {

    public static Advisor create(VectorStore vectorStore) {
        // 过滤特定的条件
        Filter.Expression expression = new FilterExpressionBuilder()
                .eq("status", 1) // 从matadata 进行对比
                .build();

        VectorStoreDocumentRetriever build = VectorStoreDocumentRetriever.builder()
                .vectorStore(vectorStore)
                .filterExpression(expression)
                .similarityThreshold(0.0) // 至少达到的 得分
                .topK(5) // 去得分最高的五条
                .build();

        return RetrievalAugmentationAdvisor.builder()
                .documentRetriever(build) // 文档检索器
//                .queryAugmenter(ContextualQueryAugmenter.builder()
//                        .allowEmptyContext(true) // 允许查询的文档是否文空
//                        .build())// 文档增强器
                .queryAugmenter(PostContextualQueryAugmenterFactory.create())// 文档增强器
                .build();

    }

    public static Advisor create(VectorStore vectorStore, Filter.Expression expression) {

        VectorStoreDocumentRetriever build = VectorStoreDocumentRetriever.builder()
                .vectorStore(vectorStore)
                .filterExpression(expression)
                .similarityThreshold(0.0) // 至少达到的 得分
                .topK(5) // 去得分最高的五条
                .build();

        return RetrievalAugmentationAdvisor.builder()
                .documentRetriever(build) // 文档检索器
//                .queryAugmenter(QueryContextualAugmenterFactory.createQueryAugmenter())// 文档增强器
                .build();

    }
}
